{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "46614645-4ab1-4e22-b4f5-add5154f6ea9",
   "metadata": {},
   "source": [
    "# Homework"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "60295779-980f-4b45-9aa3-e60a261e4e4e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Reading in LAMOST data...\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "print(\"Reading in LAMOST data...\")\n",
    "X = np.load('./data/fluxs.npy')\n",
    "y = np.load('./data/sclss.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "068c5b8a-1ff8-436e-abb8-4366c13b3824",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n",
      "(700, 3700)\n"
     ]
    }
   ],
   "source": [
    "print(type(X))\n",
    "print(X.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f062ce8f-74ed-446a-860f-6dcdbd1fb075",
   "metadata": {},
   "source": [
    "# 输出第一个光谱数据的3700个数据，并画图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "618ade3c-8c60-4aa1-a912-03eed03fd5fe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3700,)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X[0]."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8b1d32d9-46ad-4a5a-b6b3-8a599b25ab64",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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CCGEEMdGMzeEEEIIcSgU3BBCCCHEoVBwQwghhBCHQsENIYQQQhwKBTcmsnjxYoSEhMDNzQ2xsbHIzMy09pCM9sEHH0Amkwk+IiIiFPffv38f48ePR9OmTeHp6YnBgwejqKhI8BiXL19Gv3794OHhAX9/f0yePBkPHz609EvRaP/+/RgwYABatGgBmUyGzZs3C+7nOA6zZs1C8+bN4e7ujt69e+Ps2bOCc27duoXXXnsNXl5e8PHxwahRo1BRUSE4JycnB0899RTc3Nwgl8uxYMECc780jXS95hEjRqh93xMSEgTn2NNrnjdvHrp27YrGjRvD398fAwcORF5enuAcU/0s7927F507d4arqyvCwsKwatUqc788Sfq85p49e6p9n8eMGSM4x55e89KlSxEZGakoShcXF4ft27cr7ne07zGg+zU72vfYKByps19++YVzcXHhVqxYwZ06dYobPXo05+PjwxUVFVl7aEaZPXs21759e+769euKjxs3bijuHzNmDCeXy7m0tDQuKyuL69atG9e9e3fF/Q8fPuQ6dOjA9e7dm/vrr7+4bdu2cX5+ftz06dOt8XIkbdu2jXv//fe5jRs3cgC4TZs2Ce6fP38+5+3tzW3evJk7fvw49+KLL3KtW7fm7t27pzgnISGB69SpE3fkyBHujz/+4MLCwrhXX31VcX9ZWRkXEBDAvfbaa9zJkye5n3/+mXN3d+e+/vprS71MAV2vefjw4VxCQoLg+37r1i3BOfb0mvv27cutXLmSO3nyJJednc298MILXKtWrbiKigrFOab4Wb5w4QLn4eHBTZw4kfv777+5r776inN2duZ27Nhh0dfLcfq95h49enCjR48WfJ/LysoU99vba/7tt9+41NRU7syZM1xeXh43Y8YMrmHDhtzJkyc5jnO87zHH6X7NjvY9NgYFNyYQExPDjR8/XnG7pqaGa9GiBTdv3jwrjsp4s2fP5jp16iR5X2lpKdewYUNu3bp1imOnT5/mAHCHDx/mOI69iTo5OXGFhYWKc5YuXcp5eXlxVVVVZh27McRv9LW1tVxgYCC3cOFCxbHS0lLO1dWV+/nnnzmO47i///6bA8AdPXpUcc727ds5mUzGXb16leM4jluyZAnn6+sreM1Tp07l2rZta+ZXpJum4Oall17SeI29v+bi4mIOALdv3z6O40z3szxlyhSuffv2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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "first_spectrum=X[0]\n",
    "second_spectrum=X[1]\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.scatter(range(len(first_spectrum)), first_spectrum,s=3.5)\n",
    "plt.scatter(range(len(second_spectrum)), second_spectrum,s=3.5,color=\"red\")\n",
    "plt.title(' Spectrum')\n",
    "plt.xlabel('Data Point Index')\n",
    "plt.ylabel('Intensity')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "f28a06f7-8f56-425a-a538-9862763699ce",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_A = X[y == 'A']\n",
    "X_B = X[y == 'B']\n",
    "X_t = np.concatenate((X_A, X_B),axis=0)\n",
    "\n",
    "y_A = y[y == 'A']\n",
    "y_B = y[y == 'B']\n",
    "y_t = np.concatenate((y_A, y_B),axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "38a035e8-47de-42a2-b428-c0e662a7c157",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(200, 3700)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_t.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "75b983c2-6264-4b29-9a3e-83886d1723c9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 拆分训练集和测试集\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X_t, y_t, test_size=0.3, random_state=456327848)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "c0b13c43-44d8-4192-9f01-8cad70d06307",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(140, 3700) (60, 3700)\n"
     ]
    }
   ],
   "source": [
    "print(X_train.shape,X_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "2a56a57a-dacd-4f97-b4db-aa99b8048ea5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(solver=&#x27;liblinear&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(solver=&#x27;liblinear&#x27;)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression(solver='liblinear')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "# 通过LogisticRegression类定义一个逻辑回归模型名字叫lr\n",
    "lr = LogisticRegression(solver='liblinear')\n",
    "\n",
    "# 对lr模型进行训练(fit)\n",
    "lr.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d22fe447-2824-45c2-8e9e-8ae9db939a7f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-0.86678767]\n",
      "[[-0.42778822 -0.41332584 -0.20817364 ...  0.070938    0.07336795\n",
      "   0.07864992]]\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "# 查看模型结果\n",
    "print(lr.intercept_ )\n",
    "print(lr.coef_)\n",
    "\n",
    "# 把变量名称和系数对应在一起方便查看\n",
    "#pd.DataFrame(list(zip(np.transpose(lr.coef_), X_train.columns)), columns=['coef', 'columns'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "684a80b9-ff99-454e-94e6-4baa32d2fbf5",
   "metadata": {},
   "source": [
    "### Step4：模型评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b4b1a422-a125-4c5d-84b7-c4d6378c9636",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9833333333333333\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           A       1.00      0.97      0.99        36\n",
      "           B       0.96      1.00      0.98        24\n",
      "\n",
      "    accuracy                           0.98        60\n",
      "   macro avg       0.98      0.99      0.98        60\n",
      "weighted avg       0.98      0.98      0.98        60\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# 方法1：直接使用模型的score方法计算正确率\n",
    "print(lr.score(X_test,y_test))\n",
    "\n",
    "# 方法2：使用sklearn.metrics下的classification_report方法\n",
    "# 先对测试集进行预测\n",
    "y_pred = lr.predict(X_test) #预测类别标签\n",
    "y_pred_prob = lr.predict_proba(X_test) #预测类别概率\n",
    "\n",
    "# 分类评估报告classification_report\n",
    "from sklearn.metrics import classification_report\n",
    "print(classification_report(y_test,y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "5332eca4-7231-4685-9ff4-fa91f2cdc8ec",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression(C=10, penalty='l1', solver='liblinear')\n",
      "0.95\n",
      "{'C': 10, 'penalty': 'l1'}\n"
     ]
    }
   ],
   "source": [
    "# grid search调参\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "parameters = {\n",
    "    'penalty': ('l1', 'l2'),\n",
    "    'C': (0.001, 0.01, 0.1, 1, 10, 100),\n",
    "}\n",
    "\n",
    "lr = LogisticRegression(solver='liblinear')\n",
    "lr_search = GridSearchCV(lr, parameters, scoring='accuracy', cv=5)\n",
    "lr_search.fit(X_train, y_train)\n",
    "\n",
    "#查看最佳结果\n",
    "print(lr_search.best_estimator_)\n",
    "print(lr_search.best_score_)\n",
    "print(lr_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "396f4eaa-cd84-46f6-95ab-549ea2523a00",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-2 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-2 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-2 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-2 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-2 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-2 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(C=10, penalty=&#x27;l1&#x27;, solver=&#x27;liblinear&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(C=10, penalty=&#x27;l1&#x27;, solver=&#x27;liblinear&#x27;)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression(C=10, penalty='l1', solver='liblinear')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 用最佳参数重新训练模型\n",
    "lr_N = LogisticRegression(C=10,penalty='l1',solver='liblinear')\n",
    "lr_N.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "e360d9f3-af90-4a82-abc9-79c8d057e287",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['A' 'B' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A'\n",
      " 'B' 'A' 'A' 'A' 'A' 'A' 'B' 'B' 'B' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'B' 'B' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'B' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'B' 'A' 'A' 'B' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'B'\n",
      " 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'B'\n",
      " 'A' 'A' 'B' 'B' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A']\n",
      "['B' 'B' 'A' 'A' 'A' 'B' 'B' 'B' 'B' 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'B' 'A'\n",
      " 'B' 'B' 'B' 'A' 'A' 'B' 'A' 'B' 'B' 'A' 'A' 'B' 'A' 'B' 'B' 'A' 'B' 'A'\n",
      " 'A' 'A' 'B' 'A' 'B' 'B' 'A' 'A' 'A' 'B' 'B' 'B' 'A' 'B' 'A' 'B' 'A' 'B'\n",
      " 'A' 'A' 'B' 'A' 'A' 'B' 'B' 'A' 'B' 'A' 'B' 'A' 'A' 'B' 'A' 'A' 'A' 'A'\n",
      " 'A' 'B' 'A' 'A' 'B' 'B' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'B'\n",
      " 'A' 'A' 'B' 'A' 'A' 'A' 'B' 'B' 'B' 'A' 'A' 'B' 'B' 'B' 'B' 'A' 'A' 'B'\n",
      " 'B' 'A' 'B' 'B' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'B'\n",
      " 'B' 'B' 'A' 'A' 'B' 'A' 'B' 'B' 'B' 'A' 'A' 'B' 'A' 'A' 'A' 'B' 'B' 'A'\n",
      " 'B' 'A' 'B' 'B' 'A' 'A' 'B' 'B' 'A' 'B' 'A' 'B' 'B' 'A' 'A' 'A' 'B' 'B'\n",
      " 'B' 'A' 'A' 'B' 'A' 'A' 'B' 'A' 'B' 'A' 'A' 'B' 'B' 'B' 'B' 'A' 'B' 'A'\n",
      " 'B' 'B' 'B' 'B' 'B' 'A' 'B' 'A' 'B' 'B' 'A' 'B' 'B' 'B' 'B' 'B' 'B' 'B'\n",
      " 'A' 'B']\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve\n",
    "from sklearn.metrics import auc\n",
    "\n",
    "# 利用模型对测试集进行预测，输出target预测标签值和概率\n",
    "X_test2=np.load(\"./data/fluxval.npy\")\n",
    "y_test_t2=np.load(\"./data/sclsval.npy\")\n",
    "y_test_pred = lr_N.predict(X_test2)\n",
    "y_test_prob = lr_N.predict_proba(X_test2)\n",
    "print(y_test_pred)\n",
    "print(y_test_t2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "707de623-0a24-4dc0-8384-a70f67beef01",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3700,)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test2[0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "id": "5d7ebb06-0bb1-4860-b1fe-eb092659bc6f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           A       0.57      0.94      0.71       100\n",
      "           B       0.82      0.28      0.42       100\n",
      "\n",
      "    accuracy                           0.61       200\n",
      "   macro avg       0.69      0.61      0.56       200\n",
      "weighted avg       0.69      0.61      0.56       200\n",
      "\n",
      "[[94  6]\n",
      " [72 28]]\n",
      "0.615\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 分类评估汇总报告classification_report\n",
    "print(classification_report(y_test_t2,y_test_pred))\n",
    "\n",
    "# 误分类矩阵 confusion_matrix\n",
    "print(confusion_matrix(y_test_t2,y_test_pred))\n",
    "                       \n",
    "# ROC曲线\n",
    "fpr, tpr, thresholds =roc_curve(y_test_t2, y_test_prob[:,0],pos_label='A')\n",
    "\n",
    "# print AUC值\n",
    "auc = auc(fpr, tpr)\n",
    "print(auc)\n",
    "\n",
    "\n",
    "# plot ROC曲线\n",
    "plt.plot(fpr, tpr, lw=2, label='ROC curve (area = {:.2f})'.format(auc))\n",
    "plt.plot([0,1], [0, 1], 'r--')\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.title('Receiver operating characteristic example')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "212e833c-08ce-4b44-a474-34e005bae4b1",
   "metadata": {},
   "source": [
    "# 不知道为什么模型评估挺好，但是分类的正确率很低"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e773700b-db5e-44b1-8669-f05891eb6ab6",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05524b98-b622-4e3c-a338-13056185cfc2",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
